import uuid

from django.db import models

# Create your models here.
from BusinessSubSystem.models import fundField, fund
from CoreSubSystem.models import user

'''

    @author:陈王艺阳,张沛然
    @description:
        在此处存放着与用户个人信息相关的实体类
'''

class card(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -银行卡的基础信息
            - `card_bank` : 银行卡所属银行
            - `card_type` : 银行卡类型
            - `card_number` : 银行卡号码
            - `card_password` : 银行卡密码
            - `card_balance` : 银行卡余额
            - `card_single_limit` : 银行卡单笔限额
            - `card_daily_limit` : 银行卡每日限额
            - `card_icon` : 银行卡图标
            - `user_id` : 用户ID，是外键

    '''
    card_bank = models.CharField(max_length=20)
    card_type = models.CharField(max_length=10)
    card_number = models.CharField(max_length=50, unique=True)
    card_password = models.CharField(max_length=6)
    card_balance = models.DecimalField(decimal_places=2,max_digits=20)
    card_single_limit = models.DecimalField(decimal_places=2,max_digits=20)
    card_daily_limit = models.DecimalField(decimal_places=2,max_digits=20)
    card_icon = models.CharField(max_length=50)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)

class rechargeRecord(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -充值记录的基础信息
            - `record_amount` : 充值金额
            - `operate_time` : 操作时间
            - `user_id` : 用户ID，是外键
    '''
    record_amount = models.DecimalField(decimal_places=2,max_digits=20)
    operate_time = models.DateTimeField(auto_now=True)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)


class transactionRecord(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -交易记录的基础信息
            - `transaction_id` : 交易记录ID（uuid）
            - `operate_type` : 操作类型（转入、转出 String）
            - `transaction_amount` : 金额（double）
            - `operate_time` : 用户操作时间（Date）
            - `operate_state` : 操作状态（String）
            - `operate_finish_time` : 完成操作时间（Date）
            - `transaction_source` : 来源/去向 Source（余额 xx银行卡 ）
            - `user_id` : 用户ID（外键）
    '''
    CHANGE_INTO = "转入"
    TRANSFER_OUT = "转出"

    transaction_id = models.UUIDField(primary_key=True, auto_created=True, default=uuid.uuid4, editable=False)
    operate_type = models.CharField(max_length=20)
    transaction_amount = models.DecimalField(decimal_places=2,max_digits=20)
    operate_time = models.DateTimeField(auto_now=False)
    operate_state = models.CharField(max_length=20)
    operate_finish_time = models.DateTimeField(auto_now=False)
    transaction_source = models.CharField(max_length=40)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)

class asset(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -资产的基础信息
                注：该资产需要每日计算
            - `asset_amount` : 资产总金额（已买入基金序列的总金额 double）
            - `yesterday_profit` : 昨日收益（double)
            - `holding_profit` : 持有收益（持有现在基金收益  double）
            - `cumulative_profit` : 累计收益（double）
            - `user_id` : 用户ID（外键）

    '''
    asset_amount = models.DecimalField(decimal_places=2,max_digits=20)
    yesterday_profit = models.DecimalField(decimal_places=2,max_digits=20)
    holding_profit = models.DecimalField(decimal_places=2,max_digits=20)
    cumulative_profit = models.DecimalField(decimal_places=2,max_digits=20)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)

class profitDetail(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -收益明细的基础信息
            - `profitIdate` : 收益日期（Date）
            - `amount_change` : 金额变化（有正有负 相当于昨日收益 double）
            - `cumulative_profit` : 截止至该日的累计收益（double）
            - `user_id` : 用户ID（外键）

    '''
    profitIdate = models.DateTimeField(auto_now=False)
    amount_change = models.DecimalField(decimal_places=2,max_digits=20)
    cumulative_profit = models.DecimalField(decimal_places=2,max_digits=20)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)

class userToField(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            - 记录了用户与基金领域的关系
            - `user_id` : 用户id（外键）
            - `fund_field_id` : 基金领域id(外键)
    '''
    user_id = models.ForeignKey(user,on_delete=models.PROTECT)
    fund_field_id = models.ForeignKey(fundField,on_delete=models.PROTECT)

class myHolding(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -与“我的持有”功能相关的基础信息
            - `fund_name` : 基金名称（String）
            - `fund_amount` : 金额（double）
            - `yesterday_profit` : 昨日收益（double）
            - `holding_profit` : 持有收益（double）
            - `holding_profit_rate` :  持有收益率（double）   计算直接显示
            - `user_id` : 用户ID（外键）
            - `fund_id` : 基金ID（外键）

    '''
    fund_amount = models.DecimalField(decimal_places=2,max_digits=20)
    yesterday_profit = models.DecimalField(decimal_places=2,max_digits=20)
    holding_profit = models.DecimalField(decimal_places=2,max_digits=20)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)
    fund_id = models.ForeignKey(fund, on_delete=models.CASCADE)


class fundPlan(models.Model):
    '''
        @author:陈王艺阳,张沛然
        @description:
            -基金方案的基础信息
            - `fund_proportion` : 基金占比（double）
            - `user_id` : 用户ID（外键）
            - `fund_id` : 基金ID（外键）
    '''
    fund_proportion = models.DecimalField(decimal_places=4,max_digits=20)
    user_id = models.ForeignKey(user, on_delete=models.CASCADE)
    fund_id = models.ForeignKey(fund, on_delete=models.CASCADE)